import instance from '@/api/Http'

const baseURL = import.meta.env.VITE_APP_BASEURL

// 工作价值评估表单字段接口
// 工作价值评估表单字段接口
export interface JobWorthFormField {
  fieldId: number
  fieldName: string
  fieldLabel: string
  fieldType: 'input' | 'radio' | 'select' | 'number'
  inputType?: 'text' | 'number'
  fieldHint?: string
  defaultValue?: string
  required: boolean
  minValue?: number
  maxValue?: number
  stepValue?: number
  fieldGroup: string
  options?: Array<{
    label: string
    value: string
    score: number
    description?: string
    isDefault: boolean
  }>
}

// 表单配置响应接口
export interface JobWorthFormVO {
  formTitle: string
  formDescription: string
  formVersion: string
  fields: JobWorthFormField[]
}

// 工作价值评估参数接口 - 传递系数值，计算交给后端
export interface JobWorthFormValues {
  // 基础信息
  salary: number                         // 年薪（原始输入值）
  countryCode: string                   // 国家代码 (CN/US/GB等)
  
  // 工作时间配置
  workDaysPerWeek: number               // 每周工作天数 (1-7)
  wfhDaysPerWeek: number                // 每周在家办公天数 (0-7)
  annualLeave: number                   // 年假天数
  paidSickLeave: number                 // 带薪病假天数
  publicHolidays: number                // 公共假期天数
  workHours: number                     // 每天工作小时数
  commuteHours: number                  // 通勤时间（小时）
  restTime: number                      // 休息时间（小时）
  
  // 环境因素系数值
  cityFactor: number                    // 城市系数 (0.8/1.0/1.1/1.2)
  workEnvironment: number               // 工作环境系数 (0.8/1.0/1.1/1.2)
  leadership: number                    // 领导风格系数 (0.7/0.85/1.0/1.15/1.3)
  teamwork: number                      // 团队氛围系数 (0.8/1.0/1.1/1.2)
  
  // 教育与经验系数
  educationFactor: number               // 教育系数 (0.8-2.0)
  experienceMultiplier: number          // 经验倍数 (0.8-8.5)
  
  // 其他福利系数
  shuttleFactor: number                 // 班车系数 (0.7/1.0)
  canteenFactor: number                 // 食堂系数 (0.9/1.0/1.1)
}

// 保留原接口用于兼容（已废弃）
export interface JobWorthParam extends JobWorthFormValues {}

// 评论详情接口
export interface JobWorthComment {
  title: string                     // 评论标题
  content: string                   // 评论内容
  emoji: string                     // 表情符号
  details: Array<{                  // 详细信息
    label: string
    value: string
  }>
}

// 计算详情接口
export interface JobWorthCalculationDetails {
  dailySalary: number               // 日薪
  workDaysPerYear: number           // 年工作天数
  environmentFactor: number         // 环境因子
  effectiveWorkHours: number        // 有效工作小时数
  educationFactor: number           // 教育因子
  experienceMultiplier: number      // 经验倍数
}

// 工作价值评估结果接口
export interface JobWorthResultVO {
  value: number                     // 工作性价比值
  grade: string                     // 评价等级
  gradeDescription: string          // 等级描述
  details: JobWorthCalculationDetails  // 计算详情
  calculationTime: number           // 计算时间（毫秒）
  comments: JobWorthComment[]       // 评论列表
}

// AI报告参数接口 - 使用表单原始值
export interface JobWorthReportParam extends JobWorthFormValues {
  // 报告配置已移至后端自动处理
}

// API响应统一格式
export interface R<T> {
  code: number
  message: string
  data: T
  timestamp: number
}

// 表单配置已改为前端静态定义，不再从后端获取

/**
 * 计算工作价值评分
 */
export const calculateJobWorth = async (params: JobWorthFormValues): Promise<R<JobWorthResultVO>> => {
  const response = await instance.post('/entertainment/job-worth/calculate', params)
  return response.data
}

/**
 * 生成AI分析报告（流式响应）
 * 注意：此函数返回ReadableStreamDefaultReader，需要配合SSE工具使用
 */
export const generateJobWorthReport = async (params: JobWorthReportParam): Promise<ReadableStreamDefaultReader<Uint8Array>> => {
  const response = await fetch(`${baseURL}/entertainment/job-worth/report/generate`, {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
    },
    body: JSON.stringify(params)
  })

  if (!response.ok) {
    throw new Error(`请求失败: ${response.statusText}`)
  }

  if (!response.body) {
    throw new Error('No response body')
  }

  return response.body.getReader()
}

/**
 * 生成AI工作价值分析（流式响应）
 * 传递evaluationText字段包含评估结果文本
 */
export const analyzeJobWorth = async (evaluationText: string): Promise<ReadableStreamDefaultReader<Uint8Array>> => {
  const response = await fetch(`${baseURL}/entertainment/job-worth/analyze`, {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({ evaluationText })
  })

  if (!response.ok) {
    throw new Error(`请求失败: ${response.statusText}`)
  }

  if (!response.body) {
    throw new Error('No response body')
  }

  return response.body.getReader()
}
